/*
 * TraceVariable.h
 *
 *  Created on: 2012/08/06
 *      Author: guanxiaoying
 */

#ifndef TRACEVARIABLE_H_
#define TRACEVARIABLE_H_

#define TRVARI_CALCUTE  0x00000001
#define TRVARI_LOOPCNTER  0x00000002

#define Tr_VariClear() stTrVariableAccess.clear()
#define Tr_VariGetNext( astFirstOrg )  stTrVariableAccess.next.get( astFirstOrg )
#define Tr_VariGetPrev( astFirstOrg )  stTrVariableAccess.before.get( astFirstOrg )
#define Tr_VariSetNext( astFirstOrg, astNext )  stTrVariableAccess.next.set( astFirstOrg, astNext )
#define Tr_VariSetPrev( astFirstOrg, astPrev )  stTrVariableAccess.before.set( astFirstOrg, astPrev )

VOID Tr_VariResetScope( AST astTrVari );
VOID Tr_VariGetScope( AST astTrVari, TRVALUESCP *pstVarScope );
VOID Tr_VariSetScope( AST astTrVari, TRVALUESCP *pstVarScope );
VOID Tr_VariReverseScope( AST astTrVari  );
VOID Tr_VariCopyNegationScp( AST astTrVari );
VOID Tr_VariGetNegationScope( AST astTrVari, TRVALUESCP *pstVarScope );
VOID Tr_VariSetNegationScope( AST astTrVari, TRVALUESCP *pstVarScope );
VOID Tr_VariClearAllFlag( AST astTrVari );
VOID Tr_VariAddFlag( AST astTrVari, U4 addFlag );
VOID Tr_VariDeleteFlag( AST astTrVari, U4 delFlag );
VOID Tr_VariClearAllAttribute( AST astTrVari );
VOID Tr_VariAddAttribute( AST astTrVari, U4 addAttr );
VOID Tr_VariDeleteAttribute( AST astTrVari, U4 delAttr );
AST Tr_VariNew( AST astVari );
AST Tr_VariGetVari( AST astTrVari );
VOID Tr_VariClearScope( AST astVari );
VOID Tr_VariOrMergeValue( AST astTrVarOrg, AST astTrVarDst );
VOID Tr_VariAndMergeValue( AST astTrVarOrg, AST astTrVarDst );
VOID Tr_VariReplaceValue( AST astTrVarOrg, AST astTrVarDst );
BOOL Tr_VariHasValue( AST astVari );
BOOL Tr_VariNeedCalcuteScp( AST astTrVari ) ;
BOOL Tr_VariIsLoopCnter( AST astTrVari ) ;
#endif /* TRACEVARIABLE_H_ */
